package hu.comicsans;

import java.util.ArrayList;

/**
 * Kijelöl egy olyan területet, ahova hangya nem léphet.
 */
public class Kavics extends SikbeliElem implements Frissitheto {

	/**
	 * annak tárolása, hogy a kavics be van-e ragadva
	 */
	private Boolean beragadt = false;
	
	/**
	 * ennek segítségével a kavics egy körben csak egyszer mozog
	 */
	public Boolean ebbenAKorbenMozogtam = false;
	
	/**
	 * a szomszédos kavicsok listája
	 */
	private ArrayList<Kavics> szomszedosKavicsok;
	
	/**
	 * létrehoz egy új kavicsot
	 * @param x a kavics X koordinátája
	 * @param y a kavics Y koordinátája
	 * @param r a kavics sugara
	 */
	public Kavics(double x, double y, double r) {
		super(x, y, r);
		
		szomszedosKavicsok = new ArrayList<Kavics>();
	}
	
	/**
	 * új kör, amiben még nem mozogtunk
	 */
	@Override
	public void frissit(long elteltIdo) {
		
		ebbenAKorbenMozogtam = false;
	}
	
	/**
	 * Végignézi, hogy a többi kavics közül melyikkel ütközik, ezeket eltárolja a szomszédos kavicsok listájában. Ha legalább 2
	 * szomszédos kavicsa van, akkor beragadt.
	 * 
	 * @param kavicsLista az összes kavicsot tartalmazó lista
	 */
	public void utkozesKezelese(ArrayList<Kavics> kavicsLista)
	{
		szomszedosKavicsok.clear();
		
		beragadt = false;
		
		for (int i=0; i< kavicsLista.size(); i++)
		{
			if (kavicsLista.get(i).equals(this))
			{
				continue;
			}
			
			if (Jatek.ketKorMetsziEgymast(pozicio, sugar, kavicsLista.get(i).pozicio, kavicsLista.get(i).sugar)) {
				szomszedosKavicsok.add(kavicsLista.get(i));
			}
		}
		
		if (szomszedosKavicsok.size() > 1)
		{
			beragadt = true;
		}
	}
	
	/**
	 * Ezt hívja meg a hangyászsün, amikor odébbtolja a kavicsot. Ha be van ragadva, vagy már mozgott ebben a
	 * körben, akkor nem mozdul. Egyébként elmozdul, és odébbtolja a szomszédait is.
	 * 
	 * @param v a vektor, amivel odébb kell mennie a kavicsnak
	 * @return sikerült-e mozognia
	 */
	public Boolean mozogj(Vektor v)
	{		
		if (beragadt || ebbenAKorbenMozogtam)
		{
			return false;
		}
		
		ebbenAKorbenMozogtam = true;
		
		pozicio.x += v.x;
		pozicio.y += v.y;
		
		for (int i = 0; i < szomszedosKavicsok.size(); i++)
		{
			szomszedosKavicsok.get(i).mozogj(v);
		}
		
		return true;
	}
}
